{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# How to use the RNN Autoencoder with NILMTK\n",
    "\n",
    "This is an example on how to train and use the Recurrent Network (RNN) disaggregator on the [REDD](http://redd.csail.mit.edu/) dataset using [NILMTK](https://github.com/nilmtk/NILMTK/).\n",
    "\n",
    "This network was described in the [Neural NILM](https://arxiv.org/pdf/1507.06594.pdf) paper."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First of all, we need to train the RNNDisaggregator using the train data. For this example, both train and test data are consumption data of the microwave of the first REDD building."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import warnings; warnings.simplefilter('ignore')\n",
    "\n",
    "from nilmtk import DataSet\n",
    "train = DataSet('redd.h5')\n",
    "train.set_window(end=\"30-4-2011\") #Use data only until 4/30/2011\n",
    "train_elec = train.buildings[1].elec"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we need to define the disaggregator model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "from grudisaggregator import GRUDisaggregator\n",
    "gru = GRUDisaggregator()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then train the model. We need to input the train data as well as their sample period. Also, we need to pass the desired number of training epochs. Finally, save the model for later use."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/5\n",
      "1003066/1003066 [==============================] - 137s - loss: 7.2744e-04   \n",
      "Epoch 2/5\n",
      "1003066/1003066 [==============================] - 105s - loss: 6.6916e-04   \n",
      "Epoch 3/5\n",
      "1003066/1003066 [==============================] - 106s - loss: 6.5737e-04   \n",
      "Epoch 4/5\n",
      "1003066/1003066 [==============================] - 106s - loss: 6.5401e-04   \n",
      "Epoch 5/5\n",
      "1003066/1003066 [==============================] - 103s - loss: 6.5021e-04   \n"
     ]
    }
   ],
   "source": [
    "train_mains = train_elec.mains().all_meters()[0] # The aggregated meter that provides the input\n",
    "train_meter = train_elec.submeters()['microwave'] # The microwave meter that is used as a training target\n",
    "\n",
    "gru.train(train_mains, train_meter, epochs=5, sample_period=1)\n",
    "gru.export_model(\"model-redd5.h5\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now that the model is trained, we can use it to disaggregate energy data. Let's test it on the rest of the data from building 1.\n",
    "\n",
    "First we use the model to predict the microwave consumption. The results are saved automatically in a .h5 datastore."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "New sensible chunk: 121482\n",
      "New sensible chunk: 112661\n",
      "New sensible chunk: 87770\n",
      "New sensible chunk: 54084\n",
      "New sensible chunk: 2660\n",
      "New sensible chunk: 33513\n",
      "New sensible chunk: 138535\n",
      "New sensible chunk: 32514\n",
      "New sensible chunk: 27255\n",
      "New sensible chunk: 34833\n",
      "New sensible chunk: 100831\n"
     ]
    }
   ],
   "source": [
    "test = DataSet('redd.h5')\n",
    "test.set_window(start=\"30-4-2011\")\n",
    "test_elec = test.buildings[1].elec\n",
    "test_mains = test_elec.mains().all_meters()[0]\n",
    "\n",
    "disag_filename = 'disag-out.h5' # The filename of the resulting datastore\n",
    "from nilmtk.datastore import HDFDataStore\n",
    "output = HDFDataStore(disag_filename, 'w')\n",
    "\n",
    "# test_mains: The aggregated signal meter\n",
    "# output: The output datastore\n",
    "# train_meter: This is used in order to copy the metadata of the train meter into the datastore\n",
    "gru.disaggregate(test_mains, output, train_meter, sample_period=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's plot the results and compare them to the ground truth signal.\n",
    "\n",
    "**Note:** Calling plot this way, downsamples the signal to reduce computing time. To plot the entire signal call\n",
    "```\n",
    "predicted.power_series_all_data().plot()\n",
    "ground_truth.power_series_all_data().plot()\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nkiWEQiF27drFmjVr4rZXVlZGf3/++efZv38/U6ZM4cknn2T8+PE88cQTXH/99dEyV111FWbG3Llz\n27Xv+eefZ/z48ZSVlQHwxhtvMHbsWPbu3cuMGTP40Y9+RG1tLRdeeCF/+tOfDvv3ShdNlImIiK9M\nnjyZ73znOzQ0NFBYWMisWbMYO3ZsuymajkybNo1PPvmEFStW8NnPfja6fcaMGe3KlpeX8/rrr8cl\nwN5zzz00NTWxdOlSjj32WACuvfZaRowYwbe+9S3efPNNACorK3nhhReij6uurqayspK1a9dSXV3N\nyJEjqamp4a9//Su33HJLtNzDDz9MYWFh9Pcbb7yR4cOH893vfpdNmzZxzDHHMHToUM4991zmzJnD\n3XffHS37zjvv8Le//S1uJOjWW29l3Lhx/OEPf4huu+WWWzj11FO55557ePXVVw/7N0sHBSMih1F7\noJaSXiXkh/RxkWCor4e1azP/OqecAsXF6X/eq666ijvvvJMFCxZw8cUXs2DBgrgpkc4455g/fz6X\nXXZZXCDSETPjpptuigtEWlpaWLhwIVdccUU0EAEYOHAgkydP5plnnmHv3r306dOHyspKfvazn7F+\n/XpOOukkqqurGT9+PP3796e6upqbb76Z6upqgLiRkdhApL6+nv379zN69GhaWlpYvXo1xxxzDACT\nJk1i6tSpfPTRRxx//PEAzJkzh6KiouhqonfffZf169dz7733snPnzri/w7hx43juuecO+zdLF51d\nRQ6j34/7cc3fX8OzVzyb7aqI9Ii1a6GiIvOvs3IlZOKefeXl5Vx00UXMmjWLffv20dLSwle+8pXD\nPu7TTz+lrq6O0047LaHXOe6449o9vr6+npNPPrld2ZEjR9LS0sLGjRsZOXIklZWVOOeorq5myJAh\nrF69mh/+8IeUl5fzyCOPAOHRktLSUk4//fTo82zcuJF7772Xl19+mZqamuh2M4vLA/nqV7/KXXfd\nxZw5c6JTSPPmzWPChAn06dMHgPXr1wNw3XXXddi+UChEbW1tdEonkxSMiCTg92t/n+0qiPSYU04J\nBwo98TqZMnnyZG666Sa2bt3KhAkT6Nu3b9pfo3fv3ik/dtCgQRx//PEsXrw4OooyevRoysvLufPO\nO9m4cSNLliyJW6Lc0tLCRRddxO7du5k+fTojRoygpKSEzZs3c/3118etIBo0aBCVlZXMnTuXadOm\n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\nu3fKjx00aBDHH388ixcvjo6ijB49mvLycu688042btzIkiVL4pYot7S0cNFFF7F7926mT5/OiBEj\nKCkpYfPmzVx//fVxK4gGDRpEZWUlc+fOZdq0aSxbtowNGzbwk5/8JO75IJzwGhvwxGoNXDJNwYiI\nAOGhWQ2MCEBxQXFGRix60hVXXMEtt9zC8uXLmTNnTkKP6d+/P6WlpfzlL39J6TX79+9PcXEx69at\na7dvzZo1hEKhuFU3lZWVVFdXc9xxx3HGGWdQUlLC6aefTllZGa+88gqrVq2Ky+94//33Wb9+Pc8+\n+yxf+9rXotsXLVrUYX0mTZrEbbfdxvr165kzZw4lJSVccskl0f3Dhw8HoG/fvlx44YUptTldtJpG\nRER8p6SkhJ///OfMmDGDSy+9NKHHmBmXX345L7/8MqtWrUr6NUOhEF/84heZP38+GzZsiG7fvn07\ns2fPprKyMm6kobKyko8++oi5c+dG80LMjNGjR/Poo4/S1NQUly+Sl5cH0O4aKo899liHyedXXnkl\noVCIWbNmMW/ePC655JK40ZyKigqGDx/OT3/6U/bt29fu8Tt27Ej6b5AqjYyICBDOGRHxsrbXELn2\n2muTfo4HH3yQhQsXMmbMGG6++WZGjhzJli1bmDdvHkuXLqW0tLTD12r1gx/8gEWLFnHeeecxZcoU\n8vLy+MUvfkFjYyMPP/xwXNnWQGPdunU8+OCD0e1jxozhlVdeoaioiLPOOiu6/ZRTTmH48OHcfffd\nbNq0idLSUl544QV2797dYV369+/PBRdcwKOPPsrevXuZNGlS3H4z45lnnmHixImcdtpp3HDDDQwZ\nMoTNmzfz5ptvUlZWxvz585P+G6ZCwYhIwLWeVDs7uYp4RSJL09vei6bt74MHD2b58uXce++9zJo1\ni7q6OoYMGcLEiRMpLi6Oe1xHTj31VKqrq5k+fToPPfQQLS0tnHvuudErwMY6+eSTOfroo9mxYwef\n//zno9srKysxM8455xwKCgqi2/Pz81mwYAHf/OY3eeihhygqKuLLX/4yt912W6c5H5MmTeL111+n\ntLSUiRMntts/duxYli1bxgMPPMBTTz3F3r17GThwIOecc07ckuJMM52AOmdmo4CVK1euZNSo5OZP\n7fvhN6q7T39fr7PvG3169WHP9D3ZrkpGHPnjI6k5UEPjPY0U5BUc/gHiSatWraKiooJUzmciHTnc\n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\nQq7akXgX3CwzWyEPh23AJOCI3JzvNXgArFW4VVyIYmeMnQ8SIxEwxs4H8TPGzpdUQ31t7eAn0Jfx\nLrNO4B+B7cO27XELdXt83O9BYHLYNglYjS/PvANwLXAGHsRmSG7/2+BjgLMoaC547Iyx8yXGOBhj\n52sHxtj5Uurm2DfpBJsM3APMo7Ka5biw7X7gLHw10p8ANxEC1AB3As/hi709BozJ7TPrwhtACcb+\nYmeMnS8xxsEYO187MMbOl1LXqSnDNGZ2L/AUsCKcZIuA2ZIm4V1lg81scTjxdgE+GqqeBBwGTDGz\nCeZzxrN9dobX1Wa2zmJwRSh2xtj5QjsSY4szxs4X2hE1Y+x8STXULKsHGI+fPDPD5ytxR6TVwDdD\n3hbA93GLd7su9lF4+O92ZoydLzHGwRg7Xzswxs6X0vqpaRFYzexxfErW7pKOMbPzgJm4k9Hbkgaa\n2TJgNvAjwtLwVfsoxSJTtRQ7Y+x8kBiJgDF2PoifMXa+pPWVLQrUnC+TRgJXA0OAT5jZC5J2MLOF\nTWtEHyt2xtj5IDEW3LReUex8ED9j7HxJ66qpa9OY2Qv4/PBhwF+EvIUKypdVZbGjllLsjLHzQWKM\ngTF2PoifMXa+pHVVxAGcDTwBnCJpD/CVEq2qi8YaXLm1pIqdMXY+SIxr1cKMsfNB/Iyx8yUF9W/2\nF5rZ25JmAy/iXtLRKXbG2PkgMcag2PkgfsbY+ZIqaqrPSFJSUlJSUlJStQodZ2uHcb7YGWPng8QY\ng2Lng/gZY+drd6WekaSkpKSkpKRClSzNpKSkpKSkpEKVjJGkpKSkpKSkQpWMkaSkpKSkpKRClYyR\npKSkpKSkpEKVjJGkpKSkpKSkQpWMkaSkpKSkpKRClYyRpKSkpKSkpEKVjJGkpKSkpKSkQpWMkaSk\npKSkpKRClYyRpKSkpKSkpEL1R3aeK+xT/zRhAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5c83d2c090>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "result = DataSet(disag_filename)\n",
    "res_elec = result.buildings[1].elec\n",
    "predicted = res_elec['microwave']\n",
    "ground_truth = test_elec['microwave']\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "predicted.plot()\n",
    "ground_truth.plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally let's see the metric results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "============ Recall: 0.0370807004875\n",
      "============ Precision: 0.813554622514\n",
      "============ Accuracy: 0.278783362107\n",
      "============ F1 Score: 0.0709285741419\n",
      "============ Relative error in total energy: 0.768754882991\n",
      "============ Mean absolute error(in Watts): 19.2988829522\n"
     ]
    }
   ],
   "source": [
    "import metrics\n",
    "rpaf = metrics.recall_precision_accuracy_f1(predicted, ground_truth)\n",
    "print(\"============ Recall: {}\".format(rpaf[0]))\n",
    "print(\"============ Precision: {}\".format(rpaf[1]))\n",
    "print(\"============ Accuracy: {}\".format(rpaf[2]))\n",
    "print(\"============ F1 Score: {}\".format(rpaf[3]))\n",
    "\n",
    "print(\"============ Relative error in total energy: {}\".format(metrics.relative_error_total_energy(predicted, ground_truth)))\n",
    "print(\"============ Mean absolute error(in Watts): {}\".format(metrics.mean_absolute_error(predicted, ground_truth)))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:nilmtk-env]",
   "language": "python",
   "name": "conda-env-nilmtk-env-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
